import Vue from 'vue';
import Util from '../libs/util';
import VueRouter from 'vue-router';
import Cookies from 'js-cookie';
import {routers, unLoginRouter, simpleRouter, marketRouter, appRouter} from './router';
import store from '../store/index.js'

import ViewUI from 'view-design';

Vue.config.productionTip = false

Vue.use(VueRouter);

// 路由配置
const RouterConfig = {
    // mode: 'history',
    routes: routers
};

// 解决路由报"NavigationDuplicated"重复导航的问题 
const originalPush = VueRouter.prototype.push
VueRouter.prototype.push = function push(location) {
  return originalPush.call(this, location).catch(err => err)
}

export const router = new VueRouter(RouterConfig);

// 获取不需要登录的路由
const unLoginRouters = unLoginRouter.map(item => {
	return item.name;
})

// 根据路由name，获取对应的路由
const getRouterByName = function(rs, name) {
	if (!name || !rs || !rs.length) {
        return null;
    }
    let obj = null;
    for (let item of rs) {
        if (item.name === name) {
            return item;
        }
        obj = getRouterByName(item.children, name);
        if (obj) {
            return obj;
        }
    }
    return null;
}

router.beforeEach((to, from, next) => {
    
    // iview_ui loading bar
    ViewUI.LoadingBar.start();
    
    // 设置页面标题
    Util.title(to.meta.title || to.title);
    
    // 未登录状态下只能访问允许不登录的路由
    if(!Cookies.get('token')) {
    	// 跳转路由在不需要登录的白名单内直接通过，不存在则或路由无效则跳转到登录页面
    	if(unLoginRouters.indexOf(to.name) >= 0) {
	    	next();
	    }else{
	    	next({name: 'login'});
	    }
    }else{
    	// 登录状态下，不允许访问不需登录的页面，反之则通过
    	if(unLoginRouters.indexOf(to.name) >= 0) {
	    	next(false);
	    }else{
	    	// TODO 此处可做对路由权限的判断、路由404判断等相关业务逻辑，没有404页面可以直接重置到首页
	    	// 目前只判断路由是否存在，权限等根据业务在写具体的
	    	if(!getRouterByName([...simpleRouter, marketRouter, ...appRouter], to.name)) {
	    		next({name: 'error-404'});
	    	}else{
	    		next();
	    	}
	    }
    }
});

router.afterEach((to) => {
    // TODO 路由跳转后相关代码
    ViewUI.LoadingBar.finish();
    window.scrollTo(0, 0);
});
